home *** CD-ROM | disk | FTP | other *** search
- package Module::Build::PodParser;
-
- use strict;
- use vars qw($VERSION);
- $VERSION = '0.2808_01';
- $VERSION = eval $VERSION;
- use vars qw(@ISA);
-
- sub new {
- # Perl is so fun.
- my $package = shift;
-
- my $self;
-
- # Try using Pod::Parser first
- if (eval{ require Pod::Parser; 1; }) {
- @ISA = qw(Pod::Parser);
- $self = $package->SUPER::new(@_);
- $self->{have_pod_parser} = 1;
- } else {
- @ISA = ();
- *parse_from_filehandle = \&_myparse_from_filehandle;
- $self = bless {have_pod_parser => 0, @_}, $package;
- }
-
- unless ($self->{fh}) {
- die "No 'file' or 'fh' parameter given" unless $self->{file};
- $self->{fh} = IO::File->new($self->{file}) or die "Couldn't open $self->{file}: $!";
- }
-
- return $self;
- }
-
- sub _myparse_from_filehandle {
- my ($self, $fh) = @_;
-
- local $_;
- while (<$fh>) {
- next unless /^=(?!cut)/ .. /^=cut/; # in POD
- last if ($self->{abstract}) = /^ (?: [a-z:]+ \s+ - \s+ ) (.*\S) /ix;
- }
-
- my @author;
- while (<$fh>) {
- next unless /^=head1\s+AUTHORS?/ ... /^=/;
- next if /^=/;
- push @author, $_ if /\@/;
- }
- return unless @author;
- s/^\s+|\s+$//g foreach @author;
-
- $self->{author} = \@author;
-
- return;
- }
-
- sub get_abstract {
- my $self = shift;
- return $self->{abstract} if defined $self->{abstract};
-
- $self->parse_from_filehandle($self->{fh});
-
- return $self->{abstract};
- }
-
- sub get_author {
- my $self = shift;
- return $self->{author} if defined $self->{author};
-
- $self->parse_from_filehandle($self->{fh});
-
- return $self->{author} || [];
- }
-
- ################## Pod::Parser overrides ###########
- sub initialize {
- my $self = shift;
- $self->{_head} = '';
- $self->SUPER::initialize();
- }
-
- sub command {
- my ($self, $cmd, $text) = @_;
- if ( $cmd eq 'head1' ) {
- $text =~ s/^\s+//;
- $text =~ s/\s+$//;
- $self->{_head} = $text;
- }
- }
-
- sub textblock {
- my ($self, $text) = @_;
- $text =~ s/^\s+//;
- $text =~ s/\s+$//;
- if ($self->{_head} eq 'NAME') {
- my ($name, $abstract) = split( /\s+-\s+/, $text, 2 );
- $self->{abstract} = $abstract;
- } elsif ($self->{_head} =~ /^AUTHORS?$/) {
- push @{$self->{author}}, $text if $text =~ /\@/;
- }
- }
-
- sub verbatim {}
- sub interior_sequence {}
-
- 1;
-